/*
 * Copyright (c) zhg2yqq.com Corp.
 * All Rights Reserved.
 */
package com.zhg2yqq.wheels.job.util;

import com.zhg2yqq.wheels.job.core.IJob;
import com.zhg2yqq.wheels.job.core.JobParameter;

import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.extra.spring.SpringUtil;

/**
 * @author zhg2yqq, 2023年2月17日
 * @version zhg2yqq v1.0
 */
public class JobInvokeUtil {
    /**
     * 执行方法
     *
     * @param parameter 系统任务
     */
    public static void invokeMethod(JobParameter parameter) {
        String beanName = parameter.getTargetName();
        Object bean;
        if (!isValidClassName(beanName)) {
            bean = SpringUtil.getBean(beanName);
        } else {
            bean = ReflectUtil.newInstance(beanName);
        }

        if (bean instanceof IJob) {
            ((IJob) bean).execute(parameter.getParameters());
        } else {
            throw new IllegalArgumentException("the " + bean.getClass() + " not implements IJob");
        }
    }

    /**
     * 校验是否为为class包名
     *
     * @param invokeTarget 名称
     * @return true是 false否
     */
    public static boolean isValidClassName(String invokeTarget) {
        return CharSequenceUtil.count(invokeTarget, ".") > 1;
    }
}
